var CONFIG = require('../../../../../common/config');
var CODE = require('../../../../../common/code');
var async = require('async');
var moment = require('moment');
var retUtil = require('../util/retUtil');
var TgTypeModel=require('../../../../../common/mysql/mapping/TgTypeModel');
var TgKeywordModel=require('../../../../../common/mysql/mapping/TgKeywordModel');
var TgSizeModel = require('../../../../../common/mysql/mapping/TgSizeModel');
var ItbProductVer = require('../../../../../common/mysql/mapping/ItbProductVer');

var sundryUtil = (function () {
    function sundryUtil() {

    }


    /**
     * 获取分类结构树
     *
     * @author 毛凯
     * @date 2018-4-11
     * @param   designKind 10 设计分类树,  20 视频分类树, 暂时固定10
     * @param   callback 回调
     *              err 错误信息
     *              data 返回数据
     * */
    sundryUtil.getTypeTree = function(designKind,callback){
        var entity =  new TgTypeModel({
           del_flg : 0
        });
        var tasks = [];
        //1.查询所有分类(1,2,3级)
        tasks.push(function (callback) {
            entity.findFromDB(function(err,typeInfo) {
                if (err) {
                    return callback(err, null);
                }
                if (!typeInfo || typeInfo.length <= 0) {
                    return callback("未查询到分类信息", null);
                }
                var data={
                    typeInfo:typeInfo
                };
                return callback(null,data);
            });
        });
        //2.创建size宽高字典
        tasks.push(function (data,callback) {
            if(!data.typeInfo || data.typeInfo.length < 0){
                return callback("未查询到分类信息", null);
            }
            (new TgSizeModel()).findFromDB(function(err,res){
                if(err){
                    return callback(err,null);
                }
                if(!res || res.length<=0 ){
                    return callback("未查询到尺寸信息",null);
                }
                var sizeDic = {};
                for(var i=0;i<res.length;i++){
                    var size = res[i];
                    if(!sizeDic[size.size_id]){
                        sizeDic[size.size_id] = {
                            width :size.width,
                            height : size.height
                        }
                    }
                }
                data.sizeDic = sizeDic;
                return callback(null,data);
            });
        });
        //3.创建1级分类
        tasks.push(function (data,callback) {
            if(!data.typeInfo || data.typeInfo.length < 0){
                return callback("未查询到分类信息", null);
            }
            var typesDic = {};
            for(var i = 0; i < data.typeInfo.length; i++){
                var type = data.typeInfo[i];
                var parent = type.parent;
                var topParent = type.top_parent;
                var typeId = type.type_id;

                if(topParent == 2         //TODO 暂时无法使用分类  多页
                    || topParent == 3     //TODO 暂时无法使用分类  PPT
                    || topParent == 5    //TODO 暂时无法使用分类   配件
                    || topParent == 9    //TODO 暂时无法使用分类  虚拟商品
                    || topParent == 1011 //TODO 暂时无法使用分类  营销商品
                    || topParent == null){//TODO 暂时无法使用分类
                    continue;
                }
                //建立1级分类字典
                if(parent == null && topParent!=null) {
                    if (!typesDic[type.type_id]) {
                        typesDic[type.type_id] = {
                            typeId: type.type_id,
                            topParent: type.top_parent,
                            parent: type.parent,
                            typeName: type.type_name,
                            children: []
                        };
                    }
                }
            }
            data.typesDic = typesDic;
            return callback(null,data);
        });
        //3.创建2级分类
        tasks.push(function (data,callback) {
            if(!data.typeInfo || data.typeInfo.length < 0){
                return callback("未查询到分类信息", null);
            }
            var typesDicSub = {};
            for(var i = 0; i < data.typeInfo.length; i++) {
                var type = data.typeInfo[i];
                var parent = type.parent;
                var topParent = type.top_parent;
                var typeId = type.type_id;
                if (topParent == 2         //TODO 暂时无法使用分类  多页
                    || topParent == 3     //TODO 暂时无法使用分类  PPT
                    || topParent == 5    //TODO 暂时无法使用分类   配件
                    || topParent == 9    //TODO 暂时无法使用分类  虚拟商品
                    || topParent == 1011 //TODO 暂时无法使用分类  营销商品
                    || topParent == null) {//TODO 暂时无法使用分类
                    continue;
                }
                //建立2级分类字典,并把2级分类加入1级分类
                if (parent != null && parent == topParent) {
                    if (!typesDicSub[type.type_id]) {
                        typesDicSub[type.type_id] = {
                            typeId: type.type_id,
                            topParent: type.top_parent,
                            parent: type.parent,
                            typeName: type.type_name,
                            children: []
                        };
                    }
                    //把2级分类加1级分类
                    if(data.typesDic[topParent] && data.typesDic[topParent].children ){
                      data.typesDic[topParent].children.push(typesDicSub[type.type_id]);
                    }
                }
            }
            data.typesDicSub = typesDicSub;
            return callback(null,data);
        });

        //4.创建3及分类 并通过sizeId获取宽高
        tasks.push(function (data,callback) {
            if(!data.typeInfo || data.typeInfo.length <= 0){
                return callback("未查询到分类信息", null);
            }
            for(var i = 0; i <data.typeInfo.length; i++){
                var type = data.typeInfo[i];
                var parent = type.parent;
                var topParent = type.top_parent;
                var state = type.state;
                if(topParent == 2         //TODO 暂时无法使用分类  多页
                    || topParent == 3     //TODO 暂时无法使用分类  PPT
                    || topParent == 5    //TODO 暂时无法使用分类   配件
                    || topParent == 9    //TODO 暂时无法使用分类  虚拟商品
                    || topParent == 1011 //TODO 暂时无法使用分类  营销商品
                    || topParent == null){//TODO 暂时无法使用分类
                    continue;
                }
                if(parent != null && parent != topParent){
                    //在三级分类中添加sizeId
                    type.typeId = type.type_id ;
                    type.sizeId = CONFIG.YJSC_TGTYPE_SIZE_MAP[type.type_id];
                    type.typeName = type.type_name;
                    if(!type.sizeId){
                        continue;
                    }
                    //通过sizeId获取分类的宽高
                    type.width = data.sizeDic[type.sizeId] ? data.sizeDic[type.sizeId].width : 0;
                    type.height = data.sizeDic[type.sizeId]? data.sizeDic[type.sizeId].height : 0;
                    type.pageCnt =CONFIG.YJSC_TGTYPE_PAGE_MAP[type.type_id];
                    if(data.typesDicSub[parent] && data.typesDicSub[parent].children){
                        data.typesDicSub[parent].children.push(type);
                    }
                }
            }
            return callback(null,data);
        });


        //5.组装数据结构
        tasks.push(function (data,callback) {
            if(!data.typesDic){
                return callback("分类字典建立失败",null);
            }
            //封装结果
            var staticDesignTypes = [];
            var videoDesignTypes = [];
            //当1级分类等于1020时为视频分类
            for(var key in data.typesDic){

                if(data.typesDic[key].parent == null
                    && data.typesDic[key].topParent != 1020
                    && data.typesDic[key].topParent != 1040
                    && data.typesDic[key].topParent != 1050){
                    staticDesignTypes.push(data.typesDic[key]);
                }
                if(data.typesDic[key].parent == null
                    && (data.typesDic[key].topParent === 1020
                        || data.typesDic[key].topParent === 1040
                        || data.typesDic[key].topParent === 1050)){
                    videoDesignTypes.push(data.typesDic[key]);
                }
            }
            data.staticDesignTypes = staticDesignTypes;
            data.videoDesignTypes = videoDesignTypes;
            return callback(null,data);
        });
        // 顺序执行
        async.waterfall(tasks, function (error, data) {
            if(error){
                return callback(error,null);
            }
            var res = {
                staticDesignTypes :  data.staticDesignTypes || {},
                videoDesignTypes : data.videoDesignTypes||{}
            };
            return callback(null,res);
        });
    };


    /**
     * 获取默认关键词列表
     *
     * @author 毛凯
     * @date 2018-04-12
     *
     * @param callback      回调
     *          error
     *          data        分关键词分类数组
     */
    sundryUtil.getDefKwds = function (callback) {
        //查询所有关键词
        var entity =  new TgKeywordModel({
            del_flg : 0
        });
        entity.findFromDB(function(err,keyWords) {
            if(err){
                return callback(err,null);
            }
            if(!keyWords || keyWords.length<=0){
                return callback("未获取到关键词失败",null);
            }
            var designKeyword = {};
            for(var i = 0;i<keyWords.length;i++){
                var keyword = keyWords[i];
                var type = keyword.type;
                var typeName = keyword.type_name;
                if(type == 10){
                    continue;
                }
                //移除typeid 为10 用户自定义的项
                if(!designKeyword[type]){
                    designKeyword[type] = {
                        type : type,
                        typeName : typeName,
                        subKeys : []
                    };
                }
                designKeyword[type].subKeys.push(keyword);
            }
            var data = {};
            data.list=[];
            for(var key in designKeyword){
                data.list.push(designKeyword[key]);
            }
            //通过type进行排序(降序)
            data.list.sort(function(a, b){
                return a.type - b.type;
            });
            return callback(null,data);
        });

    };

    /**
     * 获取插件最新下载地址
     *
     * @author 毛凯
     * @date 2018-04-28
     * @param device   平台: 1 标识一键生成iOS端, 2 标识一键生成android端, 3一键生成ai插件
     * @param callback      回调
     *          error
     *          data        分关键词分类数组
     */
    sundryUtil.getPlatformVer = function (device,callback) {
        (new ItbProductVer()).getLastAppVersion(device,function(err,data){
                if(err){
                    return callback(err,null);
                }
            return callback(null,data||{});
        })
    };







    return sundryUtil;
})();



module.exports = sundryUtil;